package cn.hy.机考.part02;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author hy
 *
 * 十九、分苹果
 * A，B 两个人把苹果分为两堆。A 希望按照他的计算规则等分苹果，他的计算规则 是按照二进制加法计算，
 * 并且不计算走位，12+5=9(1100+0101=9)，
 * B 的计算规则是十进制加法，包括正常进位，B 希望在满足 A 的情况下获取苹果 重量最多，
 * 输入苹果的数量和每个苹果重量，输出满足 A 的情况下获取的苹果总重量，如果无法满足 A 的要求，输出-1。
 *
 * 输入第一行是苹果数量:3
 * 输入第二行是每个苹果重量:3 5 6
 * 输出第一行是 B 获取的苹果总重量:11
 */
public class Demo19 {

    public static final int INVALID_NUM = -1;

    /**
     * 首先，如果能满足 A，那么所有苹果全部 “异或”操作后，必然是0 。
     * 二进制加法不进位情况，恰恰就是异或的运行规则。
     *
     * 如例一所示：5(101) + 6 (110) = 3(011)，
     * 那么等式左边转为二进制后，一定是要和右边一模一样，每一位都一样，这样才能保证等分，因此我们可以先用异或，算出等式左边，
     * 然后此时如果再用一次异或来与等式右边比较，异或运行规则是，这一位相同，则结果是0，这一位不同，则结果是1。
     *
     * 其次，要想 B 最多，只需要将这堆苹果中，最小的一个给A即可。因为所有苹果异或的结果是0，所以任意拿出1个，分成另一堆， 那么剩下的就是B 想要的重量
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while (sc.hasNext()) {

            int num = Integer.parseInt(sc.nextLine());

            List<Integer> list = new ArrayList<>();
            for (int i = 0 ; i < num ; i++) {
                list.add(sc.nextInt());
            }
            //一个计数a，a要求相加之后对等，因为采用二进制而不进位，所以等同于异或
            int aWeight = 0;
            int bWeight = 0;
            int min = Integer.MAX_VALUE; // 最小的重量
            for (int i : list) {
                aWeight ^= i;
                bWeight += i;
                min = Math.min(i, min);
            }

            if (aWeight == 0) {
                System.out.println(bWeight - min);
            } else {
                System.out.println(INVALID_NUM);
            }
        }
    }
}
